package com.yuuzy.dao;

import com.alibaba.druid.util.StringUtils;
import com.yuuzy.model.Wip;

import java.util.List;

public class WipDAO extends BasicDAO<Wip> {
    /**
     * 查询理财产品信息
     *
     * @param wip 理财产品实体
     * @return 查询到的理财产品实体集
     */
    public List<Wip> queryWip(Wip wip) {
        StringBuilder sb = new StringBuilder("select * from wip");//查询名称为？的理财产品在wip表中的信息
        if (!StringUtils.isEmpty(wip.getWip_name())) {
            sb.append(" and wip_name like '%").append(wip.getWip_name()).append("%'");//支持模糊查询
        }
        if (wip.getWip_id() != null) {
            sb.append(" and wip_id =").append(wip.getWip_id());
        }
        String sql = sb.toString().replaceFirst("and", "where");

        return queryMulti(sql, Wip.class);
    }

    /**
     * 增加理财产品
     *
     * @param wip 增加的理财产品实体
     * @return 受影响的行数
     */
    public int insertWip(Wip wip) {
        //wip_id自增
        String sql = "INSERT INTO finance.wip(wip_name,wip_description,wip_amount,wip_year,wip_up) VALUES (?,?,?,?,?)";//添加理财产品信息
        return update(sql, wip.getWip_name(), wip.getWip_description(), wip.getWip_amount(), wip.getWip_year(), wip.getWip_up());
    }

    /**
     * 删除理财产品
     *
     * @param wip 待删除的理财产品实体
     * @return 受影响的行数
     */
    public int deleteWip(Wip wip) {
        StringBuilder sb = new StringBuilder("DELETE FROM wip");//删除id和名称相匹配的理财产品(两者至少有一个）
        if (!StringUtils.isEmpty(wip.getWip_name())) {
            //如果名称字段存在
            sb.append(" and wip_name = '").append(wip.getWip_name()).append("'");
        }
        if (wip.getWip_id() != 0) {
            //如果id字段存在
            sb.append(" and wip_id = ").append(wip.getWip_id());
        }
        String sql = sb.toString().replaceFirst("and", "where");
        return update(sql);
    }

    /**
     * 更改理财产品信息
     *
     * @param wip 待更改的理财产品实体
     * @return 受影响的行数
     */
    public int updateWip(Wip wip) {
        //id不能更改
        StringBuilder sb = new StringBuilder("UPDATE wip SET");
        if (!StringUtils.isEmpty(wip.getWip_name())) {
            //如果名称字段存在
            sb.append(" ,wip_name = '").append(wip.getWip_name()).append("'");
        }
        if (!StringUtils.isEmpty(wip.getWip_description())) {
            //如果简介字段存在
            sb.append(" ,wip_description = '").append(wip.getWip_description()).append("'");
        }
        if (wip.getWip_amount() != null) {
            //如果理财产品金额字段存在
            sb.append(" ,wip_amount = ").append(wip.getWip_amount());
        }
        if (wip.getWip_year() != null) {
            //如果管理者字段存在
            sb.append(" ,wip_year = ").append(wip.getWip_year());
        }
        if (!StringUtils.isEmpty(wip.getWip_up())) {
            //如果标志位字段存在
            sb.append(" ,wip_up = '").append(wip.getWip_up()).append("'");
        }
        String sql = sb.append(" WHERE wip_id = ").append(wip.getWip_id()).toString().replaceFirst(",", "");
        return update(sql);
    }

    /**
     * 理财产品上线功能
     *
     * @param wip 待上线的理财产品实体
     * @return 设置为上线状态的理财产品实体
     */
    private Wip upWip(Wip wip) {
        wip.setWip_up("1");
        return wip;
    }

    /**
     * 理财产品下线功能
     *
     * @param wip 待下线的理财产品实体
     * @return 设置为下线状态的理财产品实体
     */
    private Wip offWip(Wip wip) {
        wip.setWip_up("0");
        return wip;
    }

    /**
     * 实现理财产品的上下线功能
     *
     * @param wip 待上线/下线的理财产品实体
     * @return 已下线/上线的理财产品实体
     */
    public Wip up_OR_offWip(Wip wip) {
        if (wip.getWip_up().equals("1")) {
            //将上线状态转换为下线状态
            return offWip(wip);
        }
        if (wip.getWip_up().equals("0")) {
            //将下线状态转换为上线状态
            return upWip(wip);
        }
        System.out.println("错误，标志位不正确！");
        return null;
    }
}

